// 给出两个非空的链表用来表示两个非负的负数，其中，他们各自的位数按照逆序的方式存储的，并且他们
// 的每个节点只能存储一位数字
// 如果我们将两个数相加起来，则会返回一个新的链表来表示他们的和

// 思路：字符串拼接 转数字 相加 转链表返回

var addTwoNumbers = function (l1, l2) {
  if (!l2) return l1;
  if (!l1) return l2;
  const sum = l1.val + l2.val;
  const num = sum % 10;
  const carry = sum < 10 ? null : { val: 1 };
  return {
    val: num,
    next: addTwoNumbers(l1.next, addTwoNumbers(l2.next, carry)),
  };
};

var addTwoNumbers = function (l1, l2) {
  if (!l1) return l2;
  if (!l2) return l1;
  l1.val += l2.val;
  if (l1.val >= 10) {
    l1.val -= 10;
    if (l1.next && l2.next) {
      l1.next.val++;
    } else if (!l1.next) {
      l1.next = new ListNode(1);
    } else if (!l2.next) {
      l2.next = new ListNode(1);
    }
  }
  l1.next = addTwoNumbers(l1.next, l2.next);
  return l1;
}